package com.hl.controller;

import com.hl.domain.Free;
import com.hl.service.FreeService;
import com.hl.util.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Date;


import java.util.UUID;

@RestController
@RequestMapping("/free")
public class FreeController {
    @Autowired
    private FreeService freeService;

    /**
     * 查询所有公益信息
     *
     * @return
     */
    @GetMapping("/selectAll")
    public R selectAllFree(int page, int size) {
        return R.success(freeService.selectAllFree(page, size));
    }

    /**
     * 分页条件查询
     *
     * @param title
     * @param startDate
     * @param endDate
     * @param page
     * @param size
     * @return
     */

    @GetMapping("/selectByCondition")
    public R selectAllByPageAndCondition(String title, @DateTimeFormat(pattern = "yyyy-MM-dd") Date startDate, @DateTimeFormat(pattern = "yyyy-MM-dd") Date endDate, int page, int size) {
        return R.success(freeService.selectAllByPageAndCondition(title, startDate, endDate, page, size));
    }

    /**
     * 添加公益信息
     *
     * @param free
     * @return
     */
    @PostMapping("/add")
    public R insertFree(Free free) {
        return R.success(freeService.insertFree(free));
    }

    /**
     * 根据公益id删除一条信息
     *
     * @param id
     * @return
     */
    @DeleteMapping("/delete")
    public R deleteByFreeId(Integer id) {
        return R.success(freeService.deleteByFreeId(id));
    }

    /**
     * 上传文件
     *
     * @param file
     * @return
     * @throws IOException
     */
    @PostMapping("/upload")
    public R upload(MultipartFile file) throws IOException {
        String path = "d:\\picture\\";

        String originalFilename = file.getOriginalFilename();
        String ext = originalFilename.substring(originalFilename.lastIndexOf("."));
        String filename = UUID.randomUUID().toString() + ext;
        path += filename;

        file.transferTo(new File(path));
        return R.success(filename);
    }


    /**
     * 下载文件
     */
    @GetMapping("/download")
    public void download(String filename, HttpServletRequest request, HttpServletResponse response) throws IOException {
        FileInputStream inputStream = new FileInputStream("d:\\picture\\" + filename);
        ServletOutputStream outputStream = response.getOutputStream();
        //设置一次读取多少个字节
        byte[] bytes = new byte[2048];
        //读取信息
        int i = inputStream.read(bytes);
        //只要没有读完，就一边读一边写
        while (i != -1) {
            //写入信息
            outputStream.write(bytes, 0, i);
            i = inputStream.read(bytes);
        }
        outputStream.close();
        inputStream.close();
    }


    /**
     * 数据格式匹配：
     *
     * @param free
     * @return
     * @RequestBody 告诉 Spring 将 HTTP 请求体中的 JSON 或 XML 数据自动转换为 Java 对象。这对于 PUT 请求特别有用，因为 PUT 通常用于更新整个资源，需要在请求体中发送完整的资源数据。
     * 内容类型处理：
     * 使用 @RequestBody 可以自动处理 Content-Type 为 application/json 或 application/xml 的请求，将其转换为 Java 对象，简化了数据解析过程。
     */

    @PutMapping("/update")
    public R updateFreeById(@RequestBody Free free) {

        int row = freeService.updateFreeById(free);
        return row > 0 ? R.success(freeService.updateFreeById(free)) : R.fail("修改失败");
    }

}
